/**
 * 柯里化实例
 */

import { curry } from "lodash"

// 提取字符串中的指定匹配内容

// 面向过程写法
// ''.match(/\s+/g)
// ''.match(/\d+/g)

// 函数式写法
// const match = (reg, str) => str.match(reg)

// 柯里化处理
const match = curry((reg: RegExp, str: string) => str.match(reg))

const haveSpace = match(/\s+/g)
console.log(haveSpace('hello world'))

const haveNumber = match(/\d+/g)
console.log(haveNumber('hello world 123'))

// 过滤数组
const filter = curry(<T>(fn: (item: T) => boolean, arr: T[]) => arr.filter(fn))
console.log(filter(haveSpace, ['John Conner', 'John_Donne']))

const findSpace = filter(haveSpace)
console.log(findSpace(['John Conner', 'John_Donne']))

const findNumber = filter(haveNumber)
console.log(findNumber(['John Conner', 'John_Donne', 'John_123']))

export {}
